package UI;
import Project.Constant;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;


public class LoginFrame extends JFrame {


    private JTextField nicknameField;  // 昵称输入框
    private JButton enterButton;        // 进入按钮
    private JButton cancelButton;       // 取消按钮
   private Socket socket;//记住客户端的socket，方便我传参

    public LoginFrame() {
        // 设置窗口标题
        setTitle("聊天系统 - 登录");
        // 设置窗口大小
        setSize(400, 200);
        // 设置窗口关闭操作
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 使用 GridBagLayout 布局
        setLayout(new GridBagLayout());

        // 创建 GridBagConstraints 对象
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.insets = new Insets(10, 10, 10, 10);  // 设置组件之间的间距
        gbc.anchor = GridBagConstraints.WEST;   // 组件对齐方式为西（左）

        // 创建标签
        JLabel nicknameLabel = new JLabel("请输入昵称：");
        nicknameLabel.setFont
(new Font("Serif", Font.BOLD, 16));  // 设置字体样式

        // 创建昵称输入框
        nicknameField = new JTextField(20);
        nicknameField.setFont(new Font("楷体 ", Font.PLAIN, 14));  // 设置字体样式

        // 创建进入按钮并添加监听器
        enterButton = new JButton("登录");
        enterButton.setFont(new Font("楷体 ", Font.BOLD, 14));  // 设置字体样式
        enterButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String nickname = nicknameField.getText();
                if (nickname.isEmpty()) {
                    JOptionPane.showMessageDialog(LoginFrame.this, "昵称不能为空", "错误", JOptionPane.ERROR_MESSAGE);
                } else
                   {


                       try
                       {
                            Login(nickname);//登录成功
                           // 关闭当前窗口
                           dispose();
                           // 打开主聊天窗口
                           new ChatMainFrame(nickname,socket);
                       }
                       catch (Exception ex)//连不上服务器
                       {
                          ex.printStackTrace();
                       }


                   }
            }


        });

        // 创建取消按钮并添加监听器
        cancelButton = new JButton("取消");
        cancelButton.setFont(new Font("楷体 ", Font.BOLD, 14));  // 设置字体样式
        cancelButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });

        // 将组件添加到窗口
        gbc.gridx = 0;
        gbc.gridy = 0;
        add(nicknameLabel, gbc);

        gbc.gridx = 1;
        gbc.gridy = 0;
        gbc.gridwidth = 2;  // 让文本框跨越两列
        add(nicknameField, gbc);

        gbc.gridx = 0;
        gbc.gridy = 1;
        gbc.gridwidth = 1;  // 重置 gridwidth
        add(enterButton, gbc);

        gbc.gridx = 1;
        gbc.gridy = 1;
        add(cancelButton, gbc);

        // 设置窗口居中显示
        setLocationRelativeTo(null);
        this.setVisible(true);
    }

    private void Login(String nickname) throws IOException
    {
        System.out.println("用户尝试以昵称: " + nickname + " 登录");
        socket = new Socket(Constant.SERVER_IP, Constant.SERVER_PORT);//只要没啥问题就是连接上了
        DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
        dos.writeInt(1);
        dos.writeUTF(nickname);
        dos.flush();



    }


}